// api.js
import axios from "axios";
import { TaroAdapter } from "axios-taro-adapter";
import Taro from "@tarojs/taro"; // 引入 Taro 用于弹窗提示等

const API_URL = "http://localhost:8080/api";
const request = axios.create({
  baseURL: API_URL,
  timeout: 10000,
  adapter: TaroAdapter, // 使用 Taro 适配器
});

// 请求拦截器：处理请求头、添加 token 等
request.interceptors.request.use(
  (config) => {
    // 示例：添加 token 到请求头（如果存在）
    const token = Taro.getStorageSync("token");
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    // 可以添加其他公共参数，如设备信息、版本号等
    return config;
  },
  (error) => {
    // 请求错误时的处理（如网络错误）
    Taro.showToast({
      title: "请求发送失败",
      icon: "none",
      duration: 2000,
    });
    return Promise.reject(error);
  }
);

// 响应拦截器：处理响应数据、统一错误提示
request.interceptors.response.use(
  (response) => {
    // 假设后端返回格式为 { code: 200, data: ..., message: ... }
    const { code, message } = response.data;
    if (code !== 200) {
      // 非成功状态码时显示错误信息
      Taro.showToast({
        title: message || "操作失败",
        icon: "none",
        duration: 2000,
      });
      return Promise.reject(new Error(message || "接口返回错误"));
    }
    // 只返回 data 部分，简化调用
    return response.data.data;
  },
  (error) => {
    // 处理 HTTP 错误（如 404、500 等）
    let errorMsg = "网络异常，请稍后重试";
    if (error.response) {
      switch (error.response.status) {
        case 401:
          errorMsg = "登录已过期，请重新登录";
          // 示例：跳转到登录页
          Taro.navigateTo({ url: "/pages/login/index" });
          break;
        case 404:
          errorMsg = "请求的接口不存在";
          break;
        case 500:
          errorMsg = "服务器内部错误";
          break;
        default:
          errorMsg = `请求错误：${error.response.status}`;
      }
    }
    Taro.showToast({
      title: errorMsg,
      icon: "none",
      duration: 2000,
    });
    return Promise.reject(error);
  }
);

export default request;